<?php 		 

abstract class FilesUp{

		/**
		   *判断 $_FILES[$name]
		   *调用getInfo 分析文件的大小，后缀等
		   *调用checkSize
		   *调用createDir
		   *调用randStr生成随机文件名
		   * 移动返回路径
		  */



	  public $allowExt = array('jpg' , 'jpeg' , 'png' , 'gif');    
	  public $maxSize = 1; //最大上传大小，以M为单位  
	

	  /**
	   *分析$_FILE中$name域的信息
	   * @param string $name 表单中file表单项name值
	   * @return array 上传文件的信息，包含(tmp_name,oname[不含后缀的文件名称]，ext[后缀],size)
	  */
	 abstract public function getInfo($name);

	   /**
	   *创建目录 在当前网站的根目录的upload目录中，按年-月-日创建目录
	   * @param $dir string 目录路径
	   * @return string 目录路径 例 /upload/2015-03-31
	  */
	 abstract public function createDir($dir);

	   /**
	   *生成随机文件名
	   * @param int $len 随机字符串的长度
	   * @return string 指定长度的随机字符串 　
	  */
	 abstract public function randStr();

	      /**
		   *上传文件
		   * @param string $name 表单中file表单项name值
		   * @param $dir string 目录路径
		   * @return string 上传文件的路径，从web根目录开始计，如/upload/2015/0331/a.jpg
	  	  */
	 abstract public function up($name,$dir);

	 	  /**
		   *判断 $_FILES[$name]
		   *调用getInfo 分析文件的大小，后缀等
		   *调用checkSize
		   *调用createDir
		   *调用randStr生成随机文件名
		   * 移动返回路径
		  */


	 	  /**
		   *检测文件的类型，如只允许jpg,jpeg,png,rar,不允许exe
		   *@param $ext 文件的后缀
		   *@return boolean
		  */
	 abstract public function checkType($ext);


	 	  /**
		   *检测文件大小
		   *@param $size 文件的大小
		   *@return boolean
	      */
	 abstract public function checkSize($size);

	 
}





class UploadImage extends FilesUp{
	  public $allowExt = array('jpg' , 'jpeg' , 'png' , 'gif');    
	  public $maxSize = 1; //最大上传大小，以M为单位  
	 

	  /**
	   *分析$_FILE中$name域的信息
	   * @param string $name 表单中file表单项name值
	   * @return array 上传文件的信息，包含(tmp_name,oname[不含后缀的文件名称]，ext[后缀],size)
	  */
	 public function getInfo($name){
	 	return $name;
	 }

	   /**
	   *创建目录 在当前网站的根目录的upload目录中，按年-月-日创建目录
	   * @param $dir string 目录路径
	   * @return string 目录路径 例 /upload/2015-03-31
	  */
	 public function createDir($dir){
	 	return $dir;
	 }

	   /**
	   *生成随机文件名
	   * @param int $len 随机字符串的长度
	   * @return string 指定长度的随机字符串 　
	  */
	 public function randStr(){
	 	return time().mt_rand();
	 }



	 	  /**
		   *检测文件的类型，如只允许jpg,jpeg,png,rar,不允许exe
		   *@param $ext 文件的后缀
		   *@return boolean
		  */
	 public function checkType($ext){
	 	return in_array($ext,$this->allowExt);
	 }


	 	  /**
		   *检测文件大小
		   *@param $size 文件的大小
		   *@return boolean
	      */
	 public function checkSize($size){
	 	return $size<($this->maxSize*1024*1024);
	 }


	      /**
		   *上传文件
		   * @param string $name 表单中file表单项name值
		   * @param $dir string 目录路径
		   * @return string 上传文件的路径，从web根目录开始计，如/upload/2015/0331/a.jpg
	  	  */
	 public function up($name,$dir){

		 	if(!isset($name)){
		 		echo "请上传图片";
		 		exit;
		 	}

		 	//获取文件名
		 	$info=$this->getInfo($name);


		 	//验证后缀名
		 	$e=explode('.', $info['name']);
		 	$e=array_pop($e);
		 	if(!$this->checkType($e)){
		 		echo "该文件不是图片";
		 		exit;
		 	}

		 	//验证文件大小
		 	if(!$this->checkSize($info['size'])){
		 		echo "图片大小超过限制";
		 		exit;
		 	}

		 	$dir=$this->createDir($dir);//存放目录


		 	$fileName=$this->randStr().'.'.$e;//文件名

		 	if(move_uploaded_file($info['tmp_name'], $dir.'/'.$fileName)){
		 		
		 			$data['path']=$dir;
		 			$data['filename']=$fileName;

		 			return $data;

		 	}
	 }

	 	  
}


 ?>